#include <iostream>
using namespace std;

/*
    共有继承:描述is-a关系
    保护继承:描述has-a关系
    私有继承:描述has-a关系

    1. 区分:
        保护继承:可以传递n代,老师保护继承Car，老师的子类也可以使用car里面的成员（除去私有)
                                           老师的孙子类也可以使用Car里面的成员（除去私有)
                                           老师的重孙子类也可以使用Car里面的成员 (除去私有)
        私有继承:可以传递1代,老师私有继承Car，老师的子类就不能使用car里面的成员

*/

class Car
{
public:
    void start()
    {
        cout << "start" << endl;
    }
    void stop()
    {
        cout << "stop" << endl;
    }
    void addSpeed()
    {
        cout << "addSpeed" << endl;
    }
};

// 老师拥有一台车 ==》理所当然老师内部可以自由使用车类的成员
class Teacher : protected Car
{
public:
    void func()
    {
        start();
        stop();
        addSpeed();
    }
};

class SonTeacher : public Teacher
{
public:
    void func()
    {
        start();
        stop();
        addSpeed();
    }
};

int main()
{
    Teacher t;
    t.func();

    SonTeacher st;
    st.func();
}